草庐IT

c++ - gcc 和 libstdc++ 向前兼容

全部标签

c++ - msvc 相当于 gcc 的 __BASE_FILE__

在VisualC++中是否有任何等效于__BASE_FILE__的东西?我想知道当前正在由VC++编译的文件的名称。注意:__FILE__展开为当前文件,例如它可能是#include之一。来自gcc的文档:__BASE_FILE__此宏以C字符串常量的形式扩展为主输入文件的名称。这是调用C编译器时指定为参数的源文件。 最佳答案 感谢John的评论,这是一个解决方法。如果您简单地输入__BASE_FILE__=%(Filename),它不会生成文字字符串。所以把它放在双引号之间;我还添加了扩展名,因为%(Filename)没有它。__

c++ - gcc nullptr 问题

我正在移植现有代码以在gcc4.7.2下编译,并遇到了一个关于nullptr的奇怪问题。我设法将其归结为一个简单的测试用例:#includeconstchar*g_marker="Originalvalue";voidSetMarker(constchar*s){g_marker=s;}char*Test1(){returnSetMarker("Iwashere1"),nullptr;}char*Test2(){SetMarker("Iwashere2");returnnullptr;}char*Test3(){returnSetMarker("Iwashere3"),(char*)N

java - 如何从 Java 通过套接字 C++ 兼容结构发送?

假设已经有一个已经编写好的、不可更改的主机程序,它通过套接字接收这样的C++结构:#pragmapack(push,2)structData{doublex;doubley;doublez;longframeNumber;};#pragmapack(pop)平台:在VisualStudio2008中编译的C++/32位Windows应用程序如何从JavaSocket发送这样的数据?我尝试用putDouble()和putLong()填充ByteBuffer,假设long为32位,还有putInt(),但我无法生成有效值。我也随机生成和发送数据,结构级字节分配看起来不错(我只能随机化一个值

c++ - 可以在 gdb 中调用内联函数和/或使用 GCC 发出它们吗?

我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从gdb中调用一个内联函数,并且我知道它的名称和参数。我认为我应该能够做到这一点,但我明白了:Cannotevaluatefunction--maybeinlined我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些可以更轻松地在gdb中调用和检查内联函数结果的技巧?我在Lin

c++ - 使用 lambda 构造 std::function 时 libstdc++ 和 libc++ 之间的不同行为

这个问题来自thisquestion.以下代码compilesfine将clang3.4与libstdc++结合使用:#includeintmain(){std::functionf=[](){};}但是failsmiserably使用clang3.4和libc++:Infileincludedfrommain.cpp:1:Infileincludedfrom/usr/include/c++/v1/functional:465:Infileincludedfrom/usr/include/c++/v1/memory:599:/usr/include/c++/v1/tuple:320:1

c++ - 让 GCC 在 C++11 模式下在 FreeBSD 上工作

如何在FreeBSD10上获得基于GCC的C++11设置?似乎FreeBSD上最近的GCC版本附带的标准库被破坏了。我已经安装了端口gcc49然后尝试编译它:#includeintmain(){autostr=std::to_string(42);str=std::to_string(42ull);str=std::to_string(4.2);str.clear();return0;}这给了我一个错误:g++49-v-std=c++11foo.ccUsingbuilt-inspecs.COLLECT_GCC=g++49COLLECT_LTO_WRAPPER=/usr/local/li

c++ - GCC 是否优化 std::tie 仅用于可读性?

假设我有一个std::tuple:std::tuplet={1,2,3,4};我想使用std::tie只是为了这样的可读性目的:inta,b,c,d;//inrealcontextthesenameswouldbemeaningfulstd::tie(a,b,c,d)=t;对比只使用t.get(0)等GCC会优化这个元组的内存使用还是会为a,b,c,d分配额外的空间?变量? 最佳答案 在这种情况下,我看不出有任何理由不这样做,在as-ifrule下编译器只需要模拟程序的可观察行为。快速实验usinggodbolt:#include#

c++ - gcc、g++、cygwin 和 mingw 之间的关系?

我知道对于我的类(class),我必须安装cygwin才能让我的NetbeansIDE运行,但是我在设置过程中看到了g++和gcc的选项,我不确定它们是否相同,wingw在哪里?它是另一个编译器吗?如果是,为什么选择on而不是另一个? 最佳答案 g++和gcc分别是gnuC++和C编译器。它们实际上是具有不同标志的相同编译器。MinGW是“Windows的极简Gnu”。它是在Windows上运行的gnu编译器的一个端口。Cygwin是gnu编译器(以及各种其他实用程序)到Windows的另一个端口。更准确地说(IMO,无论如何),它

c++ - 使用包含不完整类型的 `boost::variant` 递归定义和访问 `std::vector` - libstdc++ 与 libc++

我正在尝试定义和访问“递归”boost::variant使用incomplete包装类和std::vector作为我的间接技巧。我的实现适用于libstdc++,但不适用于libc++。这是我定义变体的方式:structmy_variant_wrapper;usingmy_variant_array=std::vector;//;structmy_variant_wrapper{my_variant_v;templatemy_variant_wrapper(Ts&&...xs):_v(std::forward(xs)...){}};我正在使用std::vector引入间接(以便动态分配

c++ - 为什么 GCC 会破坏调用带有短参数的 abs 函数的代码?

#include#includeintmain(){shortintk=11;switch(std::abs(k)){case44:return5;break;}}以上代码在GCC4.4.7和7.1及更高版本中运行良好。它在GCC4.5.4和更高版本中给出错误::Infunction'intmain()'::7:23:error:switchquantitynotaninteger所以我的问题是为什么要在GCC中引入这个重大变化?或者,实现者是否不知道这是一个重大变化?如果是这样,为什么会这样,他们如何测试他们不会破坏现有代码?这个问题也可以针对Clang,因为它与abs函数有类似的问